/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package logica;

import fisica.CapaFisica;
import fisica.GrupoConvivienteInformacionSocialFisica;
import hibernate.objeto.GrupoConvivienteInformacionSocial;
import hibernate.objeto.InformacionSocial;
import java.util.Vector;

/**
 *
 * @author Gonzalo
 */
public class GrupoConvivienteInformacionSocialLogica extends CapaLogica {

    /**
     * Crea el grupo conviviente de la información social del paciente.
     *
     * @param datosInformacionSocialGrupoConviviente Los datos correspondientes
     * a la ficha
     * @param informacionSocial El objeto InformacionSocial correspondiente
     * @return true si se agregó/modificó correctamente, false en caso contrario
     */
    public static boolean agregarOModificarGrupoConvivienteInformacionSocial(
            Object[][] datosInformacionSocialGrupoConviviente,
            InformacionSocial informacionSocial) {

        /* Antes de agregar la info del grupo conviviente elimina toda la
         * información anterior para escribirla de nuevo */
        eliminarHistoricoGrupoConvivienteInformacionSocialPorInformacionSocial(
                    informacionSocial);

        GrupoConvivienteInformacionSocial grupoConvivienteInformacionSocial;

        int cantidadObjetosACrear = datosInformacionSocialGrupoConviviente.length;
        int objetosCreados = 0;
        
        for (int i = 0; i < cantidadObjetosACrear; i++) {
            grupoConvivienteInformacionSocial =
                    crearUObtenerObjetoGrupoConvivienteInformacionSocial(
                    datosInformacionSocialGrupoConviviente[i],
                    informacionSocial);

            if (CapaFisica.guardarOActualizarObjeto(
                    grupoConvivienteInformacionSocial)) {
                objetosCreados = objetosCreados + 1;
            } else {
                return false;
            }
        }

        if (objetosCreados == cantidadObjetosACrear) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * Elimina de la base de datos todos los registros de la tabla grupo
     * conviviente correspondiente a la información social en cuestión.
     *
     * @param informacionSocial La información social relacionada
     */
    static void
            eliminarHistoricoGrupoConvivienteInformacionSocialPorInformacionSocial(
            InformacionSocial informacionSocial) {
        //Recupera todos los grupos convivientes a eliminar
        Vector<GrupoConvivienteInformacionSocial> vectorGrupoConvivienteAEliminar =
                getVectorGrupoConvivienteInformacionSocialPorIdInformacionSocial(
                informacionSocial);

        //Los elimina
        if (vectorGrupoConvivienteAEliminar != null) {
            for (int i = 0; i < vectorGrupoConvivienteAEliminar.size(); i++) {
                CapaFisica.eliminarObjeto(vectorGrupoConvivienteAEliminar.get(i));
            }
        }
    }

    /**
     * Crea/modifica un objeto informacion social con los datos pasados por
     * parámetro.
     *
     * @param datosGrupoConviviente Los datos del grupo conviviente
     * @param informacionSocial La información social a quien se le carga la
     * el grupo conviviente
     * @return El objeto GrupoConviviente recien creado
     */
    private static GrupoConvivienteInformacionSocial 
            crearUObtenerObjetoGrupoConvivienteInformacionSocial(
            Object[] datosGrupoConviviente, InformacionSocial informacionSocial) {
        GrupoConvivienteInformacionSocial grupoConvivienteInformacionSocial =
                new GrupoConvivienteInformacionSocial();

        grupoConvivienteInformacionSocial.
                setVinculoGrupoConvivienteInformacionSocial(datosGrupoConviviente[
                INFORMACION_SOCIAL_GRUPO_CONVIVIENTE_RELACION].toString());
        grupoConvivienteInformacionSocial.
                setOcupacionGrupoConvivienteInformacionSocial(datosGrupoConviviente[
                INFORMACION_SOCIAL_GRUPO_CONVIVIENTE_OCUPACION].toString());

        grupoConvivienteInformacionSocial.setInformacionSocial(
                informacionSocial);

        return grupoConvivienteInformacionSocial;
    }

    /**
     * Retorna un vector de objetos GrupoConviviente asociados a la información
     * social.
     *
     * @param informacionSocial La información social consultada
     * @return Vector de GrupoConviviente
     */
    public static Vector<GrupoConvivienteInformacionSocial>
            getVectorGrupoConvivienteInformacionSocialPorIdInformacionSocial(
            InformacionSocial informacionSocial) {
        Vector<GrupoConvivienteInformacionSocial> grupoConvivienteInformacionSocial =
                GrupoConvivienteInformacionSocialFisica.
                getVectorGrupoConvivienteInformacionSocialPorIdInformacionSocial(
                informacionSocial.getIdInformacionSocial());

        if (grupoConvivienteInformacionSocial != null) {
            return grupoConvivienteInformacionSocial;
        } else {
            return null;
        }
    }

    /**
     * Retorna el texto HTML correspondiente a la descripcion del grupo conviviente.
     *
     * @param informacionSocial La información social.
     * @return El String que contiene el HTML
     */
    public static String getGrupoConvivienteInformacionSocialHTML(InformacionSocial informacionSocial) {
        String grupoCOnvivienteInformacionSocialHTML = "";
        
        if (informacionSocial != null) {
            Vector<GrupoConvivienteInformacionSocial> vectorGrupoConviviente =
                    GrupoConvivienteInformacionSocialLogica.
                    getVectorGrupoConvivienteInformacionSocialPorIdInformacionSocial(
                    informacionSocial);

            for (int i = 0; i < vectorGrupoConviviente.size(); i++) {
                grupoCOnvivienteInformacionSocialHTML +=
                        "<font size=\"3\" face=\"arial\" color=\"black\">Relación: </font>"
                        + "<font size=\"3\" face=\"arial\">" +
                        vectorGrupoConviviente.get(i).getVinculoGrupoConvivienteInformacionSocial() + "</font><br>" +
                        "<font size=\"3\" face=\"arial\" color=\"black\">Ocupación: </font>"
                        + "<font size=\"3\" face=\"arial\">" +
                        vectorGrupoConviviente.get(i).getOcupacionGrupoConvivienteInformacionSocial()+ "</font><br>";
            }
        }

        return grupoCOnvivienteInformacionSocialHTML;
    }

}
